"""
标准化处理器 - 将数据标准化为均值0，标准差1

这个处理器会对数值列进行标准化：(x - 均值) / 标准差
"""

import pandas as pd
import numpy as np
from ..base import PreprocessorInterface
from ..validation import validate_input_data, safe_copy_dataframe


class StandardScaler(PreprocessorInterface):
    """
    标准化处理器
    
    将数值数据标准化为均值0，标准差1的分布
    公式：(x - mean) / std
    """
    
    def process(self, data: pd.DataFrame) -> pd.DataFrame:
        """
        对数据进行标准化处理
        
        Args:
            data (pd.DataFrame): 输入数据
            
        Returns:
            pd.DataFrame: 标准化后的数据
        """
        # 验证输入数据
        validate_input_data(data)
        
        # 创建数据副本
        result = safe_copy_dataframe(data)
        
        # 获取数值列（跳过第一列ID列）
        numeric_columns = result.columns[1:]
        
        # 对每个数值列进行标准化
        for col in numeric_columns:
            if pd.api.types.is_numeric_dtype(result[col]):
                mean_val = result[col].mean()
                std_val = result[col].std()
                
                # 避免除以0
                if std_val != 0:
                    result[col] = (result[col] - mean_val) / std_val
                else:
                    # 如果标准差为0，说明所有值相同，设为0
                    result[col] = 0
        
        return result
    
    def get_name(self) -> str:
        """返回处理器名称"""
        return "标准化"
    
    def get_id(self) -> int:
        """返回唯一ID"""
        return 1  # 每个处理器必须有唯一的ID